#ifndef SDFS_JsonHelper_H
#define SDFS_JsonHelper_H

#include <json/json.h>
#include <fstream>
#include <muduo/base/Types.h>
#include <muduo/base/Logging.h>

#include <boost/shared_ptr.hpp>


namespace sdfs
{
	typedef boost::shared_ptr<Json::Value> JsonValuePtr;
	class JsonHelper
	{
	public:
		JsonHelper(){};
		~JsonHelper(){};
		
		static JsonValuePtr ParseJson(const muduo::string& str)
		{
			std::ifstream ifs;
			ifs.open(str.c_str());
			if (ifs.is_open())
			{
				Json::Reader reader;
				JsonValuePtr root(new Json::Value());
				reader.parse(ifs, *root, false) ;
				return root;
			}
			
			JsonValuePtr empty;
			return empty;
		}

		static void SerilizeJson(const muduo::string& path, Json::Value json, bool humman = false)
		{
			std::string json_content;
			if(humman)
			{
				Json::StyledWriter writer;
				json_content = writer.write(json).c_str(); 
			}
			else
			{
				Json::FastWriter writer; 
				json_content = writer.write(json).c_str(); 
			}

			// LOG_DEBUG << path;
			// LOG_DEBUG << json_content;
			std::ofstream ofs;  
			ofs.open(path.c_str(), std::ios::out|std::ios::trunc);  
			assert(ofs.good() != false);
			ofs<<json_content; 
			ofs.close();
		}
		
		/* data */
	};
}

#endif